From: Florian Müllner Date: Wed, 4 Sep 2024 18:48:55 +0000 (+0200) Subject: dbusService: Handle shell restarts better X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~173^2^2~5 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=45ff3f9e1e162ec23d1b9f1dfe43abc8b5e878b4;p=gnome-shell.git dbusService: Handle shell restarts better Our D-Bus services don't make sense outside a GNOME session, so they shut down automatically when gnome-shell is not on the bus. However this does not only apply when activating a service from a non-GNOME session, but also when restarting gnome-shell on Xorg. This is particularly problematic for services that shut down automatically, as they lose all tracking state, even when re-activated. Address this by queuing a shutdown check instead of shutting down immediately, so that the service can pick up the new shell name provided it appears before the timeout (i.e. two seconds). Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/7843 Part-of: --- diff --git a/js/dbusServices/dbusService.js b/js/dbusServices/dbusService.js index f1bc4c6f6..85ed0d9ad 100644 --- a/js/dbusServices/dbusService.js +++ b/js/dbusServices/dbusService.js @@ -30,7 +30,13 @@ export class ServiceImplementation { (c, name, owner) => (this._shellName = owner), () => { this._shellName = null; - this.emit('shutdown'); + + // For auto-shutdown services, delay shutting + // down in case the shell reappears + if (this._autoShutdown) + this._queueShutdownCheck(); + else + this.emit('shutdown'); }); this._hasSignals = this._dbusImpl.get_info().signals.length > 0; @@ -104,7 +110,7 @@ export class ServiceImplementation { if (GLib.getenv('SHELL_DBUS_PERSIST')) return; - if (this._holdCount > 0) + if (this._shellName && this._holdCount > 0) return; this.emit('shutdown');